有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当实体映射为一个对象时,使用Hibernate获取java热对象列表

我有一个类User,它包含Contacts的列表 用户类别:

@Entity
@Table(name = "profile")
public class User implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column(unique = true)
    private String login;

    @OneToMany(mappedBy = "owner", cascade = CascadeType.ALL)
    private List<Contact> contacts;
    ...
    ...
}

联络类别:

@Entity
@Table
public class Contact implements Serializable {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;

        @ManyToOne
        @JoinColumn(name = "user_profile_id")
        private User owner;
        ...
        ...
    }

如何按用户获取联系人列表。id字段


共 (2) 个答案

  1. # 1 楼答案

    我不确定我得到了你想要的

    只需通过Id查找用户,你就会得到他/她的联系人。但是,集合将被延迟加载,当您调用getContacts()Hibernate.initialize(user.getContacts())时,列表将真正被加载。在@OneToMany中将FetchMode更改为“渴望”,以防您不希望延迟加载

    例如,使用HQL查询:

    String hql = "from User where id = :userid";
    Query query = session.createQuery(hql);
    query.setInteger("userid", myUserIdIWantContacts);
    User user = (User) query.uniqueResult();
    

    或标准:

    Criteria cr = session.createCriteria(User.class);
    cr.add(Restrictions.eq("id", myUserIdIWantContacts));
    User user = (User) cr.uniqueResult();
    
  2. # 2 楼答案

    Contact有一个与User相关联的外键列,因此不需要使用join

    from Contact where owner.id = :userId
    

    请不要使用int id这样的基元类型,而是使用Integer id